package cn.edu.suda.ada.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 * <P>
 * 默认忽略输入字符串的大小写
 * 
 * @author JiangJun
 *
 */
public class PatternUtils {
	/**
	 * 匹配标记，默认忽略输入字符串的大小写
	 */
	public static Integer FLAGS = Pattern.CASE_INSENSITIVE;

	/**
	 * 根据正则表达式获得输入字符串的默认匹配对象
	 *
	 * @param input
	 *            输入字符串
	 * @param regex
	 *            正则表达式
	 * @return 匹配对象
	 */
	public static Matcher getDefaultMatcher(String input, String regex) {
		Pattern pattern = FLAGS != null ? Pattern.compile(regex, FLAGS)
				: Pattern.compile(regex);
		return pattern.matcher(input);
	}

	/**
	 * 根据正则表达式判断输入字符串是否存在匹配
	 * 
	 * @param input
	 *            输入字符串
	 * @param regex
	 *            正则表达式
	 * @return 是否匹配
	 */
	public static boolean exist(String input, String regex) {
		Matcher matcher = getDefaultMatcher(input, regex);
		return matcher.find();
	}

	/**
	 * 根据正则表达式获取指定匹配分组索引的字符串
	 * 
	 * @param input
	 *            输入字符串
	 * @param regex
	 *            正则表达式
	 * @param group
	 *            指定匹配分组索引，为 -1 时表示直接返回匹配的字符串
	 * @return 匹配字符串，若未匹配则返回空
	 */
	public static String group(String input, String regex, int group) {
		Matcher matcher = getDefaultMatcher(input, regex);
		if (matcher.find()) {
			if (-1 == group) {
				return matcher.group();
			} else {
				return matcher.group(group);
			}
		} else {
			return null;
		}
	}

	/**
	 * 根据正则表达式获取第一个匹配分组的字符串
	 * 
	 * @param input
	 *            输入字符串
	 * @param regex
	 *            正则表达式
	 * @return 第一个匹配分组的字符串，未找到返回空
	 */
	public static String first(String input, String regex) {
		return group(input, regex, 1);
	}

	/**
	 * 根据正则表达式获取最后一个匹配分组的字符串
	 * 
	 * @param input
	 *            输入字符串
	 * @param regex
	 *            正则表达式
	 * @return 最后一个匹配分组的字符串，未找到返回空
	 */
	public static String last(String input, String regex) {
		Matcher matcher = getDefaultMatcher(input, regex);
		if (matcher.find()) {
			return matcher.group(matcher.groupCount());
		} else {
			return null;
		}
	}
}